﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 集合
{
    class Program
    {
        static void Main(string[] args)
        {
            testArraylist();

            // testHashTable();
            // Console.ReadKey();

            testStack();
        }

        private static void testStack()
        {
            Stack stack = new Stack();
            
            stack.Push("yejing");
            stack.Push(34);
            stack.Push(234);
            stack.Push(new int[]{1,2,3,4}); 
            
            // 弹出一个元素
            var v = stack.Pop();
            foreach (var o in stack)
            {
                // if (o is Array)
                if(o is int[]) // 这两种方式都可以
                {
                    int[] x = (int[])o;
                    for (var i = 0; i < x.Length; i++)
                    {
                        Console.WriteLine(x[i]);
                    }
                }
                else
                {
                    Console.WriteLine(o);
                }
            }
        }

        private static void testArraylist()
        {
            // 集合的好处，不考虑长度，不考虑类型的限制
            ArrayList list = new ArrayList();

            // 添加
            list.Add("yejing");
            list.Add(45.9);
            list.Add('M');
            list.Add(true);
            list.Add(new Person()); // 默认输出命名空间
            list.Add(new int[] {12, 3, 4}); 
            list.AddRange(new int[]{1,2,3,4,5,6}); // 和上面的对比是不一样的
            // list.Add(5, "hello");
            // 删除
            
            // list.Remove("yejing");
            // list.RemoveAt(2);

            // 更新
            // list[2] = "xxx";
            
            // 查询，用索引访问
            Console.WriteLine(list[1]);
            
            // 遍历
            IEnumerator enumerator = list.GetEnumerator();
            while (enumerator.MoveNext())
            {
                var enumeratorCurrent = enumerator.Current;
                Console.WriteLine(enumeratorCurrent);
            }

            for (int i = 0; i < list.Count; i++)
            {
                if (list[i] is Person)
                {
                    Person p = (Person)list[i];
                    Console.WriteLine(p);
                }
                else if (list[i] is Array)
                {
                    Console.WriteLine("这是一个数组");
                }
                else
                {
                    Console.WriteLine(list[i]);
                }
            }
        }


        public static void testHashTable()
        {
            Hashtable ht = new Hashtable();
            ht.Add("name","yejing");
            ht.Add("age",35);
            ht.Add("addr","广州");
            ht.Add("salary",14000);
            
            // 删除
            
            // ht.Remove("name");
            
            // 修改 :如果键不存在，就添加一个
            // ht["name"] = "wangmao";
            
            // foreach (DictionaryEntry o in ht)
            // {
            //     Console.WriteLine($" {o.Key} : {o.Value}");
            //     // Console.WriteLine(o.Value);
            // }

            // Console.WriteLine("========================");
            //
            // if (ht["name"] != null)
            // {
            //     Console.WriteLine(ht["name"]);
            // }
            // else
            // {
            //     Console.WriteLine("被删除了");
            // }
            
            // Console.WriteLine(ht["name"]);
            // Console.WriteLine(ht["age"]);
            
            Console.WriteLine(ht.Count);
            
            foreach (string htKey in ht.Keys)
            {
                Console.WriteLine(htKey);
            }
        }
    }




    class Person
    {


        public string Name { get; } = "aaaa";

        public Person(string _name)
        {
            Name = _name;
        }

        public Person()
        {

        }

        public override string ToString()
        {
            return Name;
        }
    }
}
